package com.eos.orm.c3p0.dao;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.log4j.Logger;

import com.eos.common.tool.CoreKeyContext;
import com.hf.utils.StringUtil;
import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * C3p0数据库连接池核心管理类
 * 
 * @author Administrator
 * 
 */
public class DBConnectionManager {
	private static Logger log = Logger.getLogger("log4j");
	private static ComboPooledDataSource cpds = null;

	/**
	 * 初始化C3P0数据库连接池
	 */
	private static void init() {
		log.error(">>>>>>>>>>>>>>>>>>>>> <DBConnectionManager.init> Begin");
		try {
			cpds = new ComboPooledDataSource();
			cpds.setDriverClass(CoreKeyContext.getCoreKey("database_driver")); // 驱动器
			cpds.setJdbcUrl(CoreKeyContext.getCoreKey("database_url")); // 数据库url
			cpds.setUser(CoreKeyContext.getCoreKey("database_username")); // 用户名
			cpds.setPassword(CoreKeyContext.getCoreKey("database_password")); // 密码
			cpds.setInitialPoolSize(StringUtil.parseInt(CoreKeyContext
					.getCoreKey("Initial_PoolSize"))); // 初始化连接池大小
			cpds.setMinPoolSize(StringUtil.parseInt(CoreKeyContext
					.getCoreKey("Min_PoolSize"))); // 最少连接数
			cpds.setMaxPoolSize(StringUtil.parseInt(CoreKeyContext
					.getCoreKey("Max_PoolSize"))); // 最大连接数
			cpds.setAcquireIncrement(StringUtil.parseInt(CoreKeyContext
					.getCoreKey("Acquire_Increment"))); // 连接数的增量
			cpds.setIdleConnectionTestPeriod(StringUtil.parseInt(CoreKeyContext
					.getCoreKey("Idle_Test_Period"))); // 测连接有效的时间间隔
			cpds.setTestConnectionOnCheckout(Boolean.getBoolean(CoreKeyContext
					.getCoreKey("Validate").equals("") ? "false"
					: CoreKeyContext.getCoreKey("Validate"))); // 每次连接验证连接是否可用
		} catch (Exception ex) {
			ex.printStackTrace();
			log.error("C3p0数据库连接池异常：" + ex.getMessage());
		}
		log.error(">>>>>>>>>>>>>>>>>>>>> <DBConnectionManager.init> End");
	}

	/**
	 * 获取数据库连接
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		Connection connection = null;
		try {
			if (cpds == null) {
				init();// 初始化数据库连接池
			}
			connection = cpds.getConnection();
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
		return connection;
	}
}
